from functools import wraps
from app.entity.sys.user import SysUserRole
from sqlalchemy.orm import Session
from fastapi import HTTPException
###############################################
#下面是用户行为日志注解
# 2	管理员
# 3	教务员
# 4	系主任
# 5	教师
def has_permission(role: str):
    if role=='教务员':
        role_id=3
    elif role=='管理员':
        role_id=2
    elif role=='系主任':
        role_id=3
    elif role=='教师':
        role_id=3
    else:
        role_id=0

    #日志装饰器
    def decorator(func):
        @wraps(func)
        async def wrapper(*args, **kwargs):
            req = kwargs.get('req')
            db:Session = kwargs.get('db')
            user_id = req.app.state.user_id

            #查询用户是否具有角色role_id
            result = db.query(SysUserRole).filter(SysUserRole.user_id==user_id, SysUserRole.role_id==role_id).first()

            if result is None:
                raise HTTPException(
                    status_code=401,
                    detail="无访问权限"
                )
            result = await func(*args, **kwargs)

            return result
        return wrapper
    return decorator